package com.yuma.threads;

import java.util.Random;
import java.util.concurrent.*;

class CallableImpl implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 睡眠
        // Thread.sleep(1000);
        TimeUnit.SECONDS.sleep(5);
        // return new Random().nextInt(100);
        return ThreadLocalRandom.current().nextInt(100);
    }
}

public class CallableDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 未来任务
        FutureTask<Integer> task = new FutureTask<>(new CallableImpl());
        // 创建线程对象
        Thread t1 = new Thread(task);

        t1.start();  // task->run()
        System.out.println("线程在执行未来任务");

        Integer res = task.get();  // 是阻塞的方法，直到任务执行完毕后，返回了结束才继续运行
        System.out.println("得到callable返回值："  + res);

        System.out.println("程序执行结束");
    }
}
